package com.jgy.utils;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.jgy.pojo.vo.DpTemplateInfo;
import org.apache.commons.lang3.StringUtils;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author 姜光远
 * @date 2022/8/17 16:40
 */
public class DpTemplateInfoUtil {

    private static final String DEF = "def";

    private static Map<String, DpTemplateInfo> templateInfoMap = new HashMap<>();

    private static Map<String, Object> templateMapperMap = new HashMap<>();

    public static String defClassPath = "com.jgy.mapper.DpTemplateMapper";

    DpTemplateInfoUtil() {

    }

    public static void put(DpTemplateInfo dpTemplateInfo) {
        DpTemplateInfoUtil.templateInfoMap.put(dpTemplateInfo.getViewKey(), dpTemplateInfo);
    }

    public static DpTemplateInfo get(String viewKey) {
        DpTemplateInfo info = templateInfoMap.get(viewKey);
        DpTemplateInfo dpTemplateInfo = DpTemplateInfoUtil.templateInfoMap.get(viewKey);
        return dpTemplateInfo;
    }

    public static void addMapper(String viewKey, String str) {
        boolean b = false;
        String mapKey = viewKey;
        String classPath = str;
        if (StringUtils.isNotBlank(str)) {
            if (defClassPath.equals(str)) {
                if (!templateMapperMap.containsKey(viewKey)) {
                    b = true;
                    mapKey = DEF;
                }
            } else {
                b = true;
            }
        } else {
            classPath = defClassPath;
            b = true;
            mapKey = DEF;
        }
        if (b && !DpTemplateInfoUtil.templateMapperMap.containsKey(DEF)) {
            try {
                //通过反射调用method方法
                Class<?> reflectClass = Class.forName(classPath);
                Object mapperCallBean = SpringContextHolder.getBean(reflectClass);
                DpTemplateInfoUtil.templateMapperMap.put(mapKey, mapperCallBean);
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        }
    }

    public static Object getMapper(String viewKey) {
        Object orDefault = DpTemplateInfoUtil.templateMapperMap.getOrDefault(viewKey,
                DpTemplateInfoUtil.templateMapperMap.get(DEF));
        return orDefault;
    }

    public static List<Map<String, Object>> getListMap(List list) {
        List<Map<String, Object>> mapList = new ArrayList<>();
        for (Object obj : list) {
            Map<String, Object> map = JSON.parseObject(JSONObject.toJSONString(obj), Map.class);
            mapList.add(map);
        }
        return mapList;
    }

}
